第20天我要實作的是NRF24L01模組來傳送及接收訊號。
那首先是這次需要的模組
這次因為要使用兩個模組,所以會使用Arduino nano版
接著是nrf24lo1模組,為了要穩定電壓所以我焊了一個10uf的電容上去。
這邊是發送端。
接線圖
實體圖
再來是arduino部分
首先要先下載函數庫,SPI是內建的函數庫,nRF24L01的函數庫因為在程式管理器上找不到所以要去網路上自己找,printf.h這個也是,基本上打檔名上去都找的到。
接著一樣設定代數,在來用一個代數去儲存要傳送的訊息。
接著是nrf24l01所需要的基本設定,首先一如往常地先開啟模組,再來比較重要需要設定到的有setChannel(),這個是要設定發送時的頻道,再來是openWritingPipe(),這個則是設定在頻道的哪個位址,基本上隨便打都可以,在接下來是setPALevel()及setDataRate(),這兩個是設定發送強度及傳輸速率,接著要關掉它的接收模式(stopListening()),最下面兩行這是讓它啟動時印出模組的基本資料。
主程式的部分就只有傳送得資料。
接著就可以上傳程式碼。
在上傳時要記得先切換arduino的版本,根據版本要把它切換到old bootloader的選項,不然會無法上傳。
接著打開監控器就會看到模組的基本訊息。
程式碼
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
RF24 radio(7,8);
const char msg[] = "Hello World!";
void setup() {
Serial.begin(9600);
radio.begin();
radio.setAutoAck(false);
radio.openWritingPipe(0xF0F0F0F0AA);
radio.setChannel(64);
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate(RF24_2MBPS);
radio.stopListening();
printf_begin();
radio.printDetails();
}
void loop() {
radio.write(&msg, sizeof(msg));
delay(1000);
}